/**
 * 文档信息
 */
export type IDocument = {
  name: string;
  collectionUuid: string; // 项目uuid
  documentId: string; // 文档uuid，后端返回的
  uuid: string; // 同documentId，历史问题，前端使用的是uuid，在获取文档信息时赋值
  version: string; // 文档版本号
  readonly: boolean; // 文档是否只读
  description: string;
  needUpdate: boolean;
  simulations: any[]; // 仿真列表
};

/**
 * 模型树对象类型
 */
export interface ModelTreeObjectType {
  /**
   * 唯一标识，与后端服务通信使用该字段
   */
  dxid: string;
  /**
   * 自动生成的label（是否需要能修改）
   */
  label: string;
  /**
   * 是否可见
   */
  visibility: boolean;
  /**
   * 对应模型（网格、点云、曲线）的id，可能为空字符串；
   * 可用该字段来控制模型的显隐、高亮
   */
  shape: string;
  /**
   * 对象类型：文件夹 Folder ，网格 Box MeshBox，MeshObject 网格，面片 PatchObject，线 CurveObject，几何 GeomBox， Part::Feature
   */
  type:
    | 'Folder'
    | 'MeshBox'
    | 'MeshObject'
    | 'PatchObject'
    | 'CurveObject'
    | 'ApproxSurface'
    | 'GeomBox'
    | 'Part::Feature';
  /**
   * MeshObject 类型： 网格 mesh / 点云 point
   */
  meshtype?: string;
  /**
   * PatchObject 类型： segment 分割面， feature 特征面
   */
  patchtype?: string;
  /**
   * patchtype = feature 时， 特征识别类型
   */
  fittype?: number;
  /**
   * PatchObject 面片的边id（shape）数组
   */
  boundaries?: string[];
  /**
   * CurveObject 类型： segment 分割线， feature 特征线
   */
  curvetype?: string;
  /**
   * 子节点数组
   */
  children?: ModelTreeObjectType[];
}

/**
 * 导出文件时，需要传给后端的数据格式
 */
export type IFileExport = {
  type?: 'geometry' | 'mesh';
  format: string; // 具体需要导出的格式
  template?: string; // 模板，配合format确定具体导出文件格式，可以不传
  path?: string; // 导出文件保存的路径：可以是s3或本地路径
};

/**
 * 几何id的格式
 */
export type GeometryItem = `${string}_${number}`; // 如 "LINE_1", "FACE_2"

/**
 *
 * */
export type GeometryProperty = {
  POINT?: number[];
  LINE?: number[];
  FACE?: number[];
  SOLID?: number[];
};
/**
 * 属性信息
 * */
export type Property = {
  color: number;
  geometry: GeometryProperty;
  id: number;
  identityid: number;
  mid: number;
  name: string;
  show: boolean;
  thick: number;
  type: number;
};

/**
 *  几何：点、线、面等类型
 */
export interface GeometryType {
  id: number;
  pid: number;
  visible?: boolean;
}

/**
 * 集合类型
 */
export interface SetType {
  id: number;
  name: string;
  type: string;
  geometry: string[];
  visible?: true;
}

export interface NameType {
  name: string;
}

type JSONValue =
  | string
  | number
  | boolean
  | null
  | JSONValue[]
  | { [key: string]: JSONValue };

/**
 *  其他动态数据的类型（比如：分析参数），可在单独的弹窗中显示详情
 */
export type DynamicDataType = NameType & { [key: string]: JSONValue };

/**
 * 数据库每个节点的类型
 */
export interface DatabaseType extends NameType {
  type?: string;
  children?: (DatabaseType | DynamicDataType)[]; // 显示为子节点
  details?: (
    | Property
    | GeometryType
    | SetType
    | DatabaseType // 还可以张开为树结构
    | DynamicDataType
  )[];
  number?: number;
}

export const Auxiliaries = 'Auxiliaries';
export const KeySet = 'Set';
export const lock_view = 'Lock_View';
